<?php
	require_once("protect1.php"); 
	require_once("connect.php");
	require_once("settings.php");

	require_once("function.php");

	$pilih=mysql_select_db("uwika_krs",$conn);
	$pdo->query("USE uwika_krs");
	
	$_select_periode = $_global_settings['tahun_ajaran']->value;
	$_select_sesi = $_global_settings['semester']->value;
	
	//$_sks = $_POST["sks"];
	//$_daftar_hari = $_POST["daftar_hari"];
	$_kodemk = $_POST["kodemk"];
	//$_recno = $_POST["recno"];
	
	//$matakuliah = "mk";
	
	/*
	 * cheking value coming in... yang dibutuhkan sesuai / tidak
	*/
	if( empty($_kodemk) || empty($_select_periode) || empty($_select_sesi) ){
		//kodemk gk dapet buang kembali..
		$host  = $_SERVER['HTTP_HOST'];
		$uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
		$extra = 'studentpage.php'; 
		header("Location: http://$host$uri/$extra");
		?>
			<meta http-equiv="refresh" content="0; url=<?php echo $extra; ?>">
			Klik <a href="<?php echo $extra; ?>">disini</a> apabila browser anda berhenti berjalan ...
		<?php
		exit;	
	}
	/*
	 * end of cheking...
	*/

	echo "<br><center><img src=\"wait.gif\"><br><br>";
	echo "Pendaftaran anda sedang kami evaluasi, mohon tunggu sebentar ...<br><br></center>";
	
	/* evaluasi sukses
	 * true = sukses melewati evaluasi, false = gagal */
	$_evaluasi_info = new stdClass;

	/* hubungan dengan KRS, VALIDASI & JURUSAnnya cocok / tidak atau Aktif / tidak */
	$_evaluasi_info->global_krs_aktif = false;
	/* NO INFO */
	$_evaluasi_info->global_status_validasi = true; //validasi tidak aktif
	//!!!
	$_evaluasi_info->global_jurusan = false;
	/* NO INFO */

	/* validasi mata kuliahnya */
	$_evaluasi_info->validasi_terdaftar = false;
	/* NO INFO */
	$_evaluasi_info->validasi_sks_limit = false;
	//$_evaluasi_info->validasi_sks_limit_info = array($_data2->jumlah_sks, $_data3->sks, $limitsksx, $_data->toleransi);		
	$_evaluasi_info->validasi_prasyarat = false;
	/* Info prasyarat ad 2
	$_evaluasi_info->validasi_prasyarat_info[] = array('SKS', $_data2_sks_mk->meta_value, $allsks);
	$_evaluasi_info->validasi_prasyarat_info[] = array('MK',$_data2_serialize->syarat_mk, $_data2_serialize->syarat_mk_jenis
													, $_data2_serialize->syarat_mk_value ,$_data_nilai[0]['nilai'], 0);
	*/
	$_evaluasi_info->validasi_kuota_kelas = false;
	//$_evaluasi_info->validasi_kuota_kelas_info = array($_data->pagu, $_data2->jumlah);
	$_evaluasi_info->validasi_konflik_waktu = false;
	/* MKnya KITA + jadwal tabrakan dengan MKnya yg diambil + jadwal 
	$_evaluasi_info->validasi_konflik_waktu_info[] = array($_data2->kodemk, $_data2->hari, $_data2->mulaipukul, $_data2->selesaipukul, $stmt2->rowCount()
														,$_data->kodemk, $_data->hari, $_data->mulaipukul, $_data->selesaipukul, $stmt2->rowCount()); 
	*/													
	/* Status Matakuliah sudah perna diambil/tidak */
	$_evaluasi_info->status_mata_kuliah = "BARU";
	
	/* CEK KRS MASIH AKTIF / TIDAK
	 * - jika ya = maka SUKSES, lanjut evaluasi
	 * - jika tidak = gagal KRS-an, GAGAL
	 * 
	 * pengecekan lewat global_settings melihat masa KRS masih aktif
	 */	
	if (date("Y-m-d H:i:s") >= $_global_settings['waktu_krs_mulai']->value && date("Y-m-d H:i:s") <= $_global_settings['waktu_krs_selesai']->value){ // batasan waktu (jam 30 agust 13.00.01 - 14 sept 23.59.59)
		/* Masih masa KRS-an */
		$_evaluasi_info->global_krs_aktif = true;
	}else{
		/* Masa KRS-an sudah BERAKHIR */
		$_evaluasi_info->global_krs_aktif = false;
	}
	/*
	 * END Cek KRS MASih aktif / Tidak
	*/
	
	/* CEK MATA KULIAH TERSEBUT MEMANG BT DIA
	 * - jika ya = maka SUKSES, lanjut evaluasi
	 * - jika tidak = gagal KRS-an, GAGAL
	 * 
	 * pengecekan lewat global_settings melihat masa KRS masih aktif
	 */	
	$sql = "SELECT kodemk, hari, mulaipukul, selesaipukul FROM penawaran 
			WHERE kodemk = :kodemk and sesi = :sesi 
			AND periode = :periode AND jurusan = :reg_jurusan
			";
	$stmt = $pdo->prepare($sql);
	$stmt->execute(array(':kodemk' => $_kodemk
							,':sesi' => $_select_sesi
							,':periode' => $_select_periode
							,':reg_jurusan' => $reg_jurusan));
	$_data_global_jurusan = $stmt->fetchAll(PDO::FETCH_OBJ);
	if( $stmt->rowCount() <= 0 ){
		//gagal, karna tidak ad MK tersebut untuk DIA
		$_evaluasi_info->global_jurusan = false;
	}else{
		//sukses, karna tidak ad MK tersebut untuk DIA
		$_evaluasi_info->global_jurusan = true;
	}
	/*
	 * END Cek MK TERSEBUT MEMANG BT DIA
	*/

	/* CEK DOBEL PENDAFTARAN DALAM KRS
	 * - jika ya = sudah terdaftar, maka GAGAL
	 * - jika tidak = lanjut evaluasi, SUKSES
	 * 
	 * pengecekan lewat registrasi atas NRP, KODEMK, PERIODE, dan SESI (GASAL/GENAP)
	 */	
	$sql = "SELECT nrp FROM registrasi WHERE nrp = :reg_uname AND kodemk = :kodemk AND periode = :select_periode AND sesi = :select_sesi";
	$stmt = $pdo->prepare($sql);
	$stmt->execute(array(':reg_uname' => $reg_uname
							,':kodemk' => $_kodemk
							,':select_periode' => $_select_periode
							,':select_sesi' => $_select_sesi));
	$_data = $stmt->fetch(PDO::FETCH_OBJ);
	if (!empty($_data->nrp)){ 
		//gagal, sudah terdaftar
		$_evaluasi_info->validasi_terdaftar = false;
	}else{ 
		//sukses
		$_evaluasi_info->validasi_terdaftar = true;	
	}
	/*
	 * END Cek dobel pendaftaran dalam KRS
	*/
	
	/* CEK KUOTA KELAS
	 * - jika melebihi kuota = sudah penuh, maka GAGAL
	 * - jika tidak = lanjut evaluasi, SUKSES
	 * 
	 * pengecekan lewat kelasvip atas NRP, KODEMK, jika terdaftar dalam kelasVIP maka sukses walo pagu penuh
	 * pengecekan lewat penawaran atas PERIODE, SESI, KODEMK
	 * pengecekan leWAT REGISTRASI atas jumlah mahasiswa yg terdaftar pada MK tersebut, KODEMK, SESI, PERIODE
	 */	
	$sql="SELECT nrp FROM kelasvip WHERE nrp = :reg_uname and kodemk = :kodemk";
	$stmt = $pdo->prepare($sql);
	$stmt->execute(array(':reg_uname' => $reg_uname
							,':kodemk' => $_kodemk ));
	$_data = $stmt->fetch(PDO::FETCH_OBJ);
	if (empty($_data->nrp)){ 
		//Jika kosong, maka dicek PAGU nya berapa yg disediakan
		$sql = "select pagu FROM penawaran WHERE periode = :select_periode and sesi= :select_sesi and kodemk = :kodemk";
		$stmt = $pdo->prepare($sql);
		$stmt->execute(array(':select_periode' => $_select_periode
								,':select_sesi' => $_select_sesi 
								,':kodemk' => $_kodemk ));
		//DATA TERNYATA BISA LEBIH DARI 1, YANG ARTINYA BISA 3 JADWAL, tetapi yang akan dipakai adalah pagu tertinggi
		$_data = $stmt->fetch(PDO::FETCH_OBJ);
		if ($_data->pagu != 0){
			//jika pagu lebih dari 0, maka kelas dibatasi dengan pagu tersebut
			//cek jumlah mahasiswa yg telah terdaftar
			$sql = "SELECT count(registrasi.nrp) as jumlah
						FROM registrasi,biodata where kodemk=:kodemk and sesi=:sesi and periode=:periode 
						AND registrasi.nrp = biodata.nrp order by registrasi.tanggal";
			$stmt = $pdo->prepare($sql);
			$stmt->execute(array(':kodemk' => $_kodemk
									,':sesi' => $_select_sesi
									,':periode' => $_select_periode));
			$_data2 = $stmt->fetch(PDO::FETCH_OBJ);
			if( $_data2->jumlah >= $_data->pagu ){
				//jumlah mahasiswa >= pagu, maka tidak bisa menampung lagi
				$_evaluasi_info->validasi_kuota_kelas = false;
				$_evaluasi_info->validasi_kuota_kelas_info = array($_data->pagu, $_data2->jumlah);
			}else{
				//jumlah mahasiswa masih bisa menampung lagi, maka bisa mendaftar lagi
				$_evaluasi_info->validasi_kuota_kelas = true;
			}
		}else{
			//Jika pagu = 0, maka kelas tidak Dibatasi
			//serta mahasiswa dapat mendaftar berapapun
			$_evaluasi_info->validasi_kuota_kelas = true;
		}
	}else{
		//jika ada datanya maka dia kelasVIP bole mendaftar walau pagu penuh
		$_evaluasi_info->validasi_kuota_kelas = true;
	}
	/*
	 * END Cek Kuota Kelas
	*/
	
	/* CEK Konflik Hari dan Waktu
	 * - jika ada Konflik = sudah ada jadwal pada jam tersebut, maka GAGAL
	 * - jika tidak = lanjut evaluasi, SUKSES
	 * 
	 * pengecekan lewat registrasi & penawaran, butuh NRP, KODEMK yg diambil, SESI, PERIODE, RECNO
	 * pengecekan pertama cari MK tersebut (karena bisa ad 2 jadwal),
	 * pengecekan query satu persatu dari MK yang tertemu (jika ad 2 jadwal maka 2x query)
	 * dicek apakah jadwal 1 bentrok atau tidak, dicek jadwal 2 bentrok atau tidak, smpe jumlah jadwal yang ada.
	 */	
	 // recno tetap dipakai gara2 ada jadwal yg berbeda tetapi MK, JURUSAN, sama (it's making me DIZZY !), but it's mo ditanyakan lagi
	/*
	$sql = "SELECT penawaran.kodemk, penawaran.hari, penawaran.mulaipukul, penawaran.selesaipukul
			FROM  `registrasi` 
			JOIN penawaran ON penawaran.kodemk = registrasi.kodemk
			WHERE  `nrp` LIKE :reg_uname AND registrasi.periode = :select_periode AND registrasi.sesi = :select_sesi
			AND penawaran.hari = (
				SELECT hari FROM penawaran WHERE jurusan = :reg_jurusan AND kodemk = :kodemk
			)
			AND (
				penawaran.mulaipukul BETWEEN (
					SELECT mulaipukul FROM penawaran WHERE jurusan = :reg_jurusan AND kodemk = :kodemk
				) AND (
					SELECT selesaipukul FROM penawaran WHERE jurusan = :reg_jurusan AND kodemk = :kodemk
				)
				OR penawaran.selesaipukul BETWEEN (
					SELECT mulaipukul FROM penawaran WHERE jurusan = :reg_jurusan AND kodemk = :kodemk
				) AND (
					SELECT selesaipukul FROM penawaran WHERE jurusan = :reg_jurusan AND kodemk = :kodemk
				)
				OR (
					(SELECT mulaipukul FROM penawaran WHERE jurusan = :reg_jurusan AND kodemk = :kodemk)
					BETWEEN penawaran.mulaipukul AND penawaran.selesaipukul
					OR
					(SELECT selesaipukul FROM penawaran WHERE jurusan = :reg_jurusan AND kodemk = :kodemk)
					BETWEEN penawaran.mulaipukul AND penawaran.selesaipukul
				)
			)
		";
//			AND penawaran.kodemk != :kodemk
	*/
	/* hapus AND penawaran.kodemk != :kodemk untuk menampilkan MK yg bentrok walo sudah diambil Mk tersebut*/
	/*
	$stmt = $pdo->prepare($sql);
	$stmt->execute(array(':reg_uname' => $reg_uname
							,':select_periode' => $_select_periode
							,':select_sesi' => $_select_sesi
							,':reg_jurusan' => $reg_jurusan
							,':kodemk' => $_kodemk  ));
	*/

	/* RALAT, KARENA MK BISA ADA 2 JADWAL, MAKA QUERY DIGANTI */
	$sql = "SELECT recno, kodemk, hari, mulaipukul, selesaipukul FROM penawaran WHERE jurusan = :reg_jurusan AND kodemk = :kodemk
			AND periode = :select_periode AND sesi = :select_sesi ";
	$stmt = $pdo->prepare($sql);
	$stmt->execute(array(':select_periode' => $_select_periode
							,':select_sesi' => $_select_sesi
							,':reg_jurusan' => $reg_jurusan
							,':kodemk' => $_kodemk  ));
	$_sudah_konflik = false;
	while($_data = $stmt->fetch(PDO::FETCH_OBJ)){
		//why im searching using recno ? yes it's uniq dari SQL yang atas/sebelumnya BUKAN recno yg dilempar lewat POST
		$sql2 = "SELECT penawaran.kodemk, penawaran.hari, penawaran.mulaipukul, penawaran.selesaipukul
				FROM  `registrasi` 
				JOIN penawaran ON penawaran.kodemk = registrasi.kodemk
				WHERE  `nrp` LIKE :reg_uname AND registrasi.periode = :select_periode AND registrasi.sesi = :select_sesi
				AND penawaran.hari = (
					SELECT hari FROM penawaran WHERE recno = :recno
				)
				AND (
					penawaran.mulaipukul BETWEEN (
						SELECT mulaipukul FROM penawaran WHERE recno = :recno
					) AND (
						SELECT selesaipukul FROM penawaran WHERE recno = :recno
					)
					OR penawaran.selesaipukul BETWEEN (
						SELECT mulaipukul FROM penawaran WHERE recno = :recno
					) AND (
						SELECT selesaipukul FROM penawaran WHERE recno = :recno
					)
					OR (
						(SELECT mulaipukul FROM penawaran WHERE recno = :recno)
						BETWEEN penawaran.mulaipukul AND penawaran.selesaipukul
						OR
						(SELECT selesaipukul FROM penawaran WHERE recno = :recno)
						BETWEEN penawaran.mulaipukul AND penawaran.selesaipukul
					)
				)
		";
		$stmt2 = $pdo->prepare($sql2);
		$stmt2->execute(array(':reg_uname' => $reg_uname
								,':select_periode' => $_select_periode
								,':select_sesi' => $_select_sesi
								,':recno' => $_data->recno ));	
		$_data2 = $stmt2->fetch(PDO::FETCH_OBJ);
		if (!empty($_data2->kodemk)){ 
			//jika ada isinya maka bentrok dengan MK tersebut
			$_evaluasi_info->validasi_konflik_waktu = false;
			$_evaluasi_info->validasi_konflik_waktu_info[] = array($_data2->kodemk, $_data2->hari, $_data2->mulaipukul, $_data2->selesaipukul, $stmt2->rowCount()
																,$_data->kodemk, $_data->hari, $_data->mulaipukul, $_data->selesaipukul, $stmt2->rowCount());
			$_sudah_konflik = true;
		}else{
			//jika kosong, baik-baik saja
			if(!$_sudah_konflik){
				$_evaluasi_info->validasi_konflik_waktu = true;
			}
		}
	}
	
	
	/*
	 * END Cek Konflik Waktu
	*/
	
	
	/* CEK LIMIT SKS
	 * - jika sks sudah mencapai limit = sks sudah max, maka GAGAL
	 * - jika tidak = lanjut evaluasi, SUKSES
	 * 
	 * pengecekan lewat registrasi, butuh NRP, PERIODE, SESI
	 * pengecekan ips ngecek IPS yg terbaru butuh NRP
	 * pengecekan SKS lewat tabel mk yg disesuaikan dengan penawaran
	 */	

	//sql default menghitung SKS yang dapat diambil dari nilai IPS langsung dari RIRIS
	$sql = "SELECT sks,ips,toleransi FROM ips WHERE nrp = :reg_uname"; //rubah ambil IPSnya saja baru dpt SKS limit
	$stmt = $pdo->prepare($sql);
	$stmt->execute(array(':reg_uname' => $reg_uname )); //reg jurusan dari protect1.php
	$_data = $stmt->fetch(PDO::FETCH_OBJ);
	//list($sks,$ips,$toleransi) = $row;
	
	$sql = "select sum(sks) as jumlah_sks from registrasi where nrp = :reg_uname";
	$stmt2 = $pdo->prepare($sql);
	$stmt2->execute(array(':reg_uname' => $reg_uname )); //reg jurusan dari protect1.php
	$_data2 = $stmt2->fetch(PDO::FETCH_OBJ);
	//list($sksdlmkrs) = $row;

	$sql = "select mk.sks
			FROM penawaran, mk WHERE jurusan = :reg_jurusan AND penawaran.kodemk = :kodemk and sesi = :sesi 
			and periode = :periode and penawaran.kodemk = mk.kodemk";
	$stmt_validasi_sks_limit3 = $pdo->prepare($sql);
	$stmt_validasi_sks_limit3->execute(array(':reg_jurusan' => $reg_jurusan
							,':kodemk' => $_kodemk
							,':sesi' => $_select_sesi
							,':periode' => $_select_periode));
	$_data_validasi_sks_limit3 = $stmt_validasi_sks_limit3->fetch(PDO::FETCH_OBJ);
	
	if ($_data->ips < 1.500) {
		$limitsksx = 12;
	}
	if (($_data->ips >= 1.500) and ($_data->ips < 1.750)) {
		$limitsksx = 14;
	}
	if (($_data->ips >= 1.750) and ($_data->ips < 2.000)) {
		$limitsksx = 16;
	}
	if (($_data->ips >= 2.000) and ($_data->ips < 2.250)) {
		$limitsksx = 18;
	}
	if (($_data->ips >= 2.250) and ($_data->ips < 3.000)) {
		$limitsksx = 21;
	}
	if ($_data->ips >= 3.000) {
		$limitsksx = 24;
	}
	/*
		mengubah disini YULIUS H
		untuk siswa angkatan baru agar tidak 12 SKS
	*/
	$pengecekan = $reg_uname[3].$reg_uname[4];
	if ($pengecekan == 12)
	{
		$limitsksx = 24;
	}
	// Sampai disini saja!

	if ( $_data2->jumlah_sks + $_data_validasi_sks_limit3->sks > $limitsksx + $_data->toleransi) {
		$_evaluasi_info->validasi_sks_limit = false;
		$_evaluasi_info->validasi_sks_limit_info = array($_data2->jumlah_sks, $_data_validasi_sks_limit3->sks, $limitsksx, $_data->toleransi);		
	}else{
		$_evaluasi_info->validasi_sks_limit = true;
	}
	/*
	 * END Cek SKS Limit
	*/

	/* CEK PRASYARATAN
	 * - jika lolos prasyarat 1-10 + grade + SKS limit MK tersebut, maka LULUZZZ...
	 * - jika tidak.. yo.. gk cux..
	 * 
	 */	
	//seleksi prasyarat..
	$sql = "select meta_key, meta_value FROM penawaran, mk, mk_metadata  
			WHERE penawaran.kodemk = mk.kodemk AND mk_metadata.kode_mk = mk.kodemk
			AND penawaran.jurusan = :reg_jurusan AND penawaran.kodemk = :kodemk 
			AND penawaran.sesi = :sesi AND penawaran.periode = :periode
			
			AND (meta_key LIKE :meta_key1 OR meta_key LIKE :meta_key2)
		";
//			AND (meta_key LIKE :meta_key)
	$stmt = $pdo->prepare($sql);
	$stmt->execute(array(':reg_jurusan' => $reg_jurusan
							,':kodemk' => $_kodemk
							,':sesi' => $_select_sesi
							,':periode' => $_select_periode

							,':meta_key1' => '%syarat_sks%'
							,':meta_key2' => '%syarat_mk%'

							));
	if($stmt->rowCount() > 0){
		/* artinya ad isi di mk_metadata
		 * metadata means...
		 * meta_key ->	syarat_sks = syarat SKS minimal untuk mengambil MK ini
		 * 				syarat_mk:$num = syarat dengan MK yg lainnya
		 *				*syarat_mk_jenis:$num = jenis syarat dengan MK yg lainnya (syarat_mk:$num)
		 *				*syarat_mk_value:$num = isi syarat minimal dari MK yg lainnya (syarat_mk:$num)
		 * 				konversi = konversi MK ini menjadi kode MK yg lain..
		 */
		 $_data = $stmt->fetchAll();
		 //var_dump($_data);
		 //echo '<p>';
		//kita ambil syarat_mk nya ad berapa.. kalau 1-2an 
		//trus kita liat syaratnya sesuai / tidak
		$lolos_validasi_prasyarat = true;

		$sql = "select meta_key, meta_value FROM mk_metadata WHERE kode_mk = :kodemk AND meta_key LIKE :meta_key";
		$stmt2 = $pdo->prepare($sql);
		$stmt2->execute(array( ':kodemk' => $_kodemk
								,':meta_key' => '%syarat_mk:%'));
		if( $stmt2->rowCount() > 0){
			while($_data2 = $stmt2->fetch(PDO::FETCH_OBJ)){
				$value = substr(strstr($_data2->meta_key, ':'),1); //value dari kode_mk
				//kita cari jenis syaratnya dari syarat tsb
				$_data2_serialize = unserialize($_data2->meta_value);
				
				if( ($_data2_serialize->syarat_mk_jenis == 1) ){
					$default_value_lulus = 'C'; //disini nanti ganti global default LULUS, kalau tidak dimskkan standart lulus biasanya C !. (D-E dianggap tak lulus)
					if( empty($_data2_serialize->syarat_mk_value) ){
						$_data2_serialize->syarat_mk_value = $default_value_lulus;
					}
					//echo $_data2_serialize->syarat_mk_value;
					//echo '<p>';
					
					//cari nilainya apakah suadh lulus / tidak
					$sql = "SELECT nilai FROM sks WHERE kodemk = :kodemk AND nrp = :nrp"; //BL apsti g lulus lah..
					$stmt_nilai = $pdo->prepare($sql);
					$stmt_nilai->execute(array( ':kodemk' => $_data2_serialize->syarat_mk
												,':nrp' => $reg_uname));
					$_data_nilai = $stmt_nilai->fetchAll(PDO::FETCH_ASSOC);	
					
					/* konversi disini nanti
					 * kosong
					 * ...
					*/
					
					/*
					 * end of konversi...
					*/
					
					if($stmt_nilai->rowCount() > 0){
						usort($_data_nilai, "sort_nilai_huruf");
						//var_dump($_data_nilai);
						//echo '<p>';
						
						//setelah jika dia sudah ambil, kita bandingkan apakah nilainya sudah melewati standart tesebut...
						//kita ubah huruf -> angka trus bandingkan spa yg lbi gede 
						if( $function->huruf2angka($_data_nilai[0]['nilai']) >= $function->huruf2angka($_data2_serialize->syarat_mk_value) ){
							//anggap syarat lulus sama atau lebih besar maka LOLOS
							if ( $lolos_validasi_prasyarat ){
								$_evaluasi_info->validasi_prasyarat = true;
								//echo 'sudah lulus dan lewat..<p>';
							}else{
								//podo ae.. dia lolos prasyarat yg ini.. tpi... ya gt deh..
							}
							//$_evaluasi_info->validasi_prasyarat_info[] = array('MK',$_data2_serialize->syarat_mk, $_data2_serialize->syarat_mk_jenis
							//												, $_data2_serialize->syarat_mk_value ,$_data_nilai[0]['nilai'], 1);
						}else{
							//echo 'belum lulus pastinya dari Nilai minimal<p>';
							$lolos_validasi_prasyarat = false;
							$_evaluasi_info->validasi_prasyarat = false;
							$_evaluasi_info->validasi_prasyarat_info[] = array('MK',$_data2_serialize->syarat_mk, $_data2_serialize->syarat_mk_jenis
																			, $_data2_serialize->syarat_mk_value ,$_data_nilai[0]['nilai'], 0);
						}
					}else{
						//kalau g ad, artinya dia BELUM MENGAMBIL MK TERSEBUT... dan BELUM LULUS TEPATNYA
						//echo 'belum ambil & lulus pastinya <p>';
						$lolos_validasi_prasyarat = false;
						$_evaluasi_info->validasi_prasyarat = false;
						$_evaluasi_info->validasi_prasyarat_info[] = array('MK',$_data2_serialize->syarat_mk, $_data2_serialize->syarat_mk_jenis
																		, $_data2_serialize->syarat_mk_value, 0, 0);
					}
				}else{
					//selain 1.. trus ap ?? g ad..
				}
			} //END WHILE dari SYARAT_MK
		}else{
			//tidak ada persyaratan MK sama skali..
			//echo 'NO: syarat PERSYARATAN MK<p>';
			$_evaluasi_info->validasi_prasyarat = true;			
		}
		
		/*
		 * disini setelah ngecek MK prasyarat,.. sekarang ngecek SKS minimal. nanti ditambahkan lagi jika ad lagi.
		 * pengecekan SKS limti dimulai dari melihatSKS limit MK ini dan SKS nya si mahasiswa.
		*/
		$sql = "select meta_key, meta_value FROM mk_metadata WHERE kode_mk = :kodemk AND meta_key LIKE :meta_key";
		$stmt2_sks_mk = $pdo->prepare($sql);
		$stmt2_sks_mk->execute(array( ':kodemk' => $_kodemk
								,':meta_key' => '%syarat_sks%'));
		$_data2_sks_mk = $stmt2_sks_mk->fetch(PDO::FETCH_OBJ);
		if ( $_data2_sks_mk->meta_value > 0 ){
			var_dump( $_data2_sks_mk->meta_value);
			echo '<p>';

			$allsks = 0;
			$sql = "SELECT kodemk, sks, nilai FROM `sks` WHERE nrp=:nrp Order by kodemk, nilai";
			// $sql = "SELECT distinct(kodemk),sks, nilai FROM `sks` WHERE nrp=:nrp"; 
			$stmt_sks = $pdo->prepare($sql);
			$stmt_sks->execute(array(':nrp' => $reg_uname));
			$_data_sks = $stmt_sks->fetchAll(PDO::FETCH_OBJ);
			//hapus data ganda! dan pakai nilai tertinggi
			//ini bisa digunakan ketika nantinya sks dipakai sendiri. tetapi rasanya tidak... ~.~
			for($i = 0; $i <count($_data_sks); $i++){
				for($j = 1; $j <count($_data_sks) - 1; $j++){
					if( ($_data_sks[$i]->kodemk == $_data_sks[$j]->kodemk) && ($i!=$j) && (isset($_data_sks[$i])) && (isset($_data_sks[$j])) ){
						if($function->huruf2angka($_data_sks[$i]->nilai) >= $function->huruf2angka($_data_sks[$j]->nilai)){
							$_data_sks[$j] = null;
						}else{
							$_data_sks[$i] = null;
						}
					}
				}
			}			
			//hitung nilai yg bukan bukan BL. setelah data dihapus yg ganda dan diambil nilai tertinggi
			foreach($_data_sks as $_datafor_sks){ //fetch data to stdclass object
				if(isset($_datafor_sks)){
					if($_datafor_sks->nilai != "BL"){
						$allsks = $allsks + $_datafor_sks->sks;
					}
				}
			}

			echo $allsks;
			echo '<p>';
			
			if( $allsks >= $_data2_sks_mk->meta_value ){
				//artinya LOLOS dari syarat SKS
				if ( $lolos_validasi_prasyarat ){
					$_evaluasi_info->validasi_prasyarat = true;
					//echo 'lulus syarat SKS MINIMAL<p>';
				}else{
					//lulus SKS minimal.. tpi prasyarat MK nya g lulus
					//echo 'lulus syarat SKS MINIMAL, tpi Prasyarat MK g lulus<p>';
				}
			}else{
				//artinya SKS nya kurang dalam mengambil MK ini.
				$lolos_validasi_prasyarat = false;
				$_evaluasi_info->validasi_prasyarat = false;
				$_evaluasi_info->validasi_prasyarat_info[] = array('SKS', $_data2_sks_mk->meta_value, $allsks);
				//echo 'SKS MINIMAL kurang dalam mengambil mk ini<p>';
			}
		}else{
			//tidak ada persyaratan SKS minimal sama skali...
			if ( $lolos_validasi_prasyarat ){
				$_evaluasi_info->validasi_prasyarat = true;
				//echo 'NO: syarat SKS LIMIT<p>';
			}else{
				//lolos SKS minimal.. tpi prasyarat MK nya g lulus
				//echo 'NO: syarat SKS LIMIT, tpi Prasyarat MK gk lulus<p>';
			}
		}
		/*
		 * pengecekan SKS minimal disini
		*/
	}else{
		//kalau g ad pryasrat = lewat ~
		$_evaluasi_info->validasi_prasyarat = true;
		//echo 'NO: syarat <p>';
	}
	

	/*
	 * optimal
	v	*1. masa KRS masih aktif 
	?	*2. masa status Mahasiswa Valiadsi masih bisa mengambil
	v	*3. apakah MK ini emang untuk jurusannya.
	v	4. sudah terdaftar ?
	v	5. sks limit ?
	v	6. prasyarat
	v		a. apakah mata kuliah prasyarat sudah lulus dengan nilai minim
	v		b. apakah sks minimal untuk mengambil mk ini sudah tercapai (contoh KP/TA)
	v	7. kuota kelas
	v	8. konflik waktu
		
		*. status baru/ulang
		
		ternyata Matakuliah yang sama bisa ada di 2 jadwal yang berbeda DALAM 1 JURUSAN &/ SEMESTER memakai RECNO sebagai pembeda
	*/
	
	//CEK STATUS PENDAFTARAN -> Baru / Ulang
	$sql = "select kodemk from sks where kodemk= :kodemk and nrp= :reg_uname";
	$stmt = $pdo->prepare($sql);
	$stmt->execute(array(':kodemk' => $_kodemk
						,':reg_uname' => $reg_uname )) //reg jurusan dari protect1.php
					or die("ERROR: " . implode(":", $pdo->errorInfo()));
	$_data = $stmt->fetch(PDO::FETCH_OBJ);
	if (!empty($_data->kodemk)) {
		$_evaluasi_info->status_mata_kuliah = 'ULANG';
	} else {
		$_evaluasi_info->status_mata_kuliah = 'BARU';
	}
	// END HERE

	
	/* hubungan dengan KRS, VALIDASI & JURUSAnnya cocok / tidak atau Aktif / tidak */
	//$_evaluasi_info->global_krs_aktif = false;
	//$_evaluasi_info->global_status_validasi = false;
	//$_evaluasi_info->global_jurusan = false;

	/* validasi mata kuliahnya */
	//$_evaluasi_info->validasi_terdaftar = false;
	//$_evaluasi_info->validasi_sks_limit = false;
	//$_evaluasi_info->validasi_sks_limit_info = array($_data2->jumlah_sks, $_data3->sks, $limitsksx, $_data->toleransi);		
	//$_evaluasi_info->validasi_prasyarat = false;
	/* Info prasyarat ad 2
	$_evaluasi_info->validasi_prasyarat_info[] = array('SKS', $_data2_sks_mk->meta_value, $allsks);
	$_evaluasi_info->validasi_prasyarat_info[] = array('MK',$_data2_serialize->syarat_mk, $_data2_serialize->syarat_mk_jenis
													, $_data2_serialize->syarat_mk_value ,$_data_nilai[0]['nilai'], 0);
	*/
	//$_evaluasi_info->validasi_kuota_kelas = false;
	//$_evaluasi_info->validasi_kuota_kelas_info = array($_data->pagu, $_data2->jumlah);
	//$_evaluasi_info->validasi_konflik_waktu = false;
	/* MKnya KITA + jadwal tabrakan dengan MKnya yg diambil + jadwal 
	$_evaluasi_info->validasi_konflik_waktu_info[] = array($_data2->kodemk, $_data2->hari, $_data2->mulaipukul, $_data2->selesaipukul, $stmt2->rowCount()
														,$_data->kodemk, $_data->hari, $_data->mulaipukul, $_data->selesaipukul, $stmt2->rowCount()); 
	*/													
	/* Status Matakuliah sudah perna diambil/tidak */
	//$_evaluasi_info->status_mata_kuliah = "BARU";
	//var_dump($_evaluasi_info);echo '<p>';
	
	if( $_evaluasi_info->global_krs_aktif ){
		echo 'eval: LOLOS, KRS sedang Aktif ! <p>';
	}else{
		echo 'eval: TIDAK LOLOS, KRS sedang Tidak Aktif ! <p>';
	}
	if( $_evaluasi_info->global_status_validasi ){
		echo 'eval: LOLOS, Status Validasi masih Boleh mengambil KRS ! <p>';
	}else{
		echo 'eval: TIDAK LOLOS, Status Validasi Sudah tidak boleh mengambil KRS ! <p>';
	}
	if( $_evaluasi_info->global_jurusan ){
		echo 'eval: LOLOS, MK Terdaftar di Jurusan Ini ! <p>';
	}else{
		echo 'eval: TIDAK LOLOS, MK TIDAK terdaftar di Jurusan ini ! <p>';
	}
	if( $_evaluasi_info->validasi_terdaftar ){
		echo 'eval: LOLOS, Anda belum mendaftar MK ini ! <p>';
	}else{
		echo 'eval: TIDAK LOLOS, Anda SUDAH mendaftar Mk ini! <p>';
	}
	if( $_evaluasi_info->validasi_sks_limit ){
		echo 'eval: LOLOS, SKS anda masih dapat mengambil MK ini ! <p>';
	}else{
		echo 'eval: TIDAK LOLOS, SKS anda sudah mencapai LIMIT ! <br>';
		echo 'SKS SKRNG '.$_evaluasi_info->validasi_sks_limit_info[0];
		echo ' SKS MK '.$_evaluasi_info->validasi_sks_limit_info[1];
		echo ' LIMITSKS '.$_evaluasi_info->validasi_sks_limit_info[2];
		echo ' TOLERANSI '.$_evaluasi_info->validasi_sks_limit_info[3]; echo '<p>';
	}
	if( $_evaluasi_info->validasi_prasyarat ){
		echo 'eval: LOLOS, Prasyarat SKSLIMIT & MKSYARAT LOLOS ! <br>';
	}else{
		echo 'eval: TIDAK LOLOS, Tidak lolos Prasyarat! <br>';		
	}	
	for($i = 0; $i< count($_evaluasi_info->validasi_prasyarat_info); $i++){
		$prasyarat_info = $_evaluasi_info->validasi_prasyarat_info;
		echo 'JENIS '.$prasyarat_info[0];
		if( $prasyarat_info[0] == 'MK' ){
			echo ' ,MK SYARAT '.$prasyarat_info[1];
			echo ' ,JENIS MK SYARAT '.$prasyarat_info[2];
			echo ' ,HARUS MINIMAL '.$prasyarat_info[3];
			echo ' ,HASIL ANDA '.$prasyarat_info[4];
		}else{
			echo ' ,SYARAT SKS MK '.$prasyarat_info[1];
			echo ' ,SKS ANDA '.$prasyarat_info[2];
		}	
	}echo '<p>';
	
	if( $_evaluasi_info->validasi_kuota_kelas ){
		echo 'eval: LOLOS, Kuota Kelas masih bisa diisi ! <p>';
	}else{
		echo 'eval: TIDAK LOLOS, KUOTA KELAS MAXIMAL ! <br>';
		echo 'PAGU '.$_evaluasi_info->validasi_kuota_kelas_info[0];
		echo ' JUMLAH SKRNG '.$_evaluasi_info->validasi_kuota_kelas_info[1]; echo '<p>';
	}
	if( $_evaluasi_info->validasi_konflik_waktu ){
		echo 'eval: LOLOS, tidak ada Konflik waktu dengan MK yg ada ! <p>';
	}else{
		echo 'eval: TIDAK LOLOS, ada tabrak-an waktu dengan MK yg lain ! <p>';
	}	
	
	if( $_evaluasi_info->global_krs_aktif && $_evaluasi_info->global_status_validasi && $_evaluasi_info->global_jurusan
	 && $_evaluasi_info->validasi_terdaftar && $_evaluasi_info->validasi_sks_limit && $_evaluasi_info->validasi_prasyarat
	 && $_evaluasi_info->validasi_kuota_kelas && $_evaluasi_info->validasi_konflik_waktu ){
		echo 'eval_result: LOLOS SEMUA <p>';
		
		$sql = "INSERT INTO registrasi (nrp, kodemk, periode, status, sesi, tanggal, jam, ip_address, sks, hari, mulaipukul, selesaipukul)
		values (:reg_uname, :kodemk, :periode, :status, :sesi, :tanggaldaftar, :jamdaftar, :ip, :sksmk, :harimk, :mulaipukulmk, :selesaipukulmk)";
		$stmt = $pdo->prepare($sql);
		$stmt->execute(array(':reg_uname' => $reg_uname ,':kodemk' => $_kodemk 
							,':periode' => $_select_periode ,':status' => $_evaluasi_info->status_mata_kuliah 
							,':sesi' => $_select_sesi ,':tanggaldaftar' => date("Y-m-d") 
							,':jamdaftar' => date("H:i:s") ,':ip' => $_SERVER["REMOTE_ADDR"] 
							,':sksmk' => $_data_validasi_sks_limit3->sks ,':harimk' => $_data_global_jurusan[count($_data_global_jurusan)-1]->hari 
							,':mulaipukulmk' => $_data_global_jurusan[count($_data_global_jurusan)-1]->mulaipukul ,':selesaipukulmk' => $_data_global_jurusan[count($_data_global_jurusan)-1]->selesaipukul
		)) or die("ERROR: " . implode(":", $stmt->errorInfo()));

		//Prosedur lama di break guna merazia mahasiswa yang terlambat KRS

		$sql = "select firstlogin from security where username = :reg_uname";
		$stmt = $pdo->prepare($sql);
		$stmt->execute(array(':reg_uname' => $reg_uname )) //reg jurusan dari protect1.php
					or die("ERROR: " . implode(":", $stmt->errorInfo()));
		$_data = $stmt->fetch(PDO::FETCH_OBJ);
		
		if ( $_data->firstlogin == '0000-00-00 00:00:00' ) {		
			$sql = "UPDATE security set firstlogin= :waktusekarang where username= :reg_uname";
			$stmt = $pdo->prepare($sql);
			$stmt->execute(array(':reg_uname' => $reg_uname 
								,':waktusekarang'=> date("Y-m-d H:i:s") )); //reg jurusan dari protect1.php
		}
		// Prosedur dilanjutkan disini ...
		//echo "<meta http-equiv=\"refresh\" content=\"0; url=studentpage.php\">";
		echo "Klik <a href=\"studentpage.php\">disini</a> apabila browser anda berhenti berjalan ...";
		exit;
	}else{
		echo 'eval_result: ADA YG TIDAK LOLOS<p>';
	}
?>
